﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.DirectoryServices.AccountManagement;
using Credinka.Ayni.SEA.EN;
using Credinka.Ayni.SEA.RN;
using System.Web.Security;
using System.DirectoryServices.ActiveDirectory;
using System.DirectoryServices;
using Credinka.Ayni.GEN.UTL;

public partial class Login : System.Web.UI.Page {
  private enUsuario oenUsuario = new enUsuario();
  private rnUsuario ornUsuario = new rnUsuario();

  private enOficina oenOficina = new enOficina();
  private rnOficina ornOficina = new rnOficina();

  String strRedirect;

  protected void Page_Load(object sender, EventArgs e) {
    if (!Page.IsPostBack) { }
  }

  private enUsuario BuscarUsuarioDominio() {
    DirectoryContext dc = new DirectoryContext(DirectoryContextType.Domain, Environment.UserDomainName, Username.Text, Password.Text);
    Domain domain = Domain.GetDomain(dc);
    DirectoryEntry de = domain.GetDirectoryEntry();

    DirectorySearcher deSearch = new DirectorySearcher(de);
    deSearch.Filter = "(&(objectClass=user)(objectCategory=person))";
    SearchResultCollection results = deSearch.FindAll();
    enUsuario oenUsuarioAdd = new enUsuario();

    foreach (SearchResult objUsuarioDominio in results) {
      oenUsuarioAdd.NombreUsuario = objUsuarioDominio.Properties["sAMAccountName"][0].ToString();
      oenUsuarioAdd.NombreCompleto = objUsuarioDominio.Properties["name"][0].ToString();
      oenUsuarioAdd.AudNombreUsuarioCreacion = objUsuarioDominio.Properties["accountexpires"][0].ToString();
    }
    return oenUsuarioAdd;
  }

  protected void btnIniciar_Click(object sender, EventArgs e) {
    try {
      lblMsg.Text = string.Empty;

      oenUsuario.NombreUsuario = Username.Text;
      oenUsuario = ornUsuario.ObtenerUsuario(oenUsuario);
      Session["obe_Usuario"] = oenUsuario;

      List<enOficina> loenOficina = ornOficina.ListarOficinaPorUsuario(oenUsuario.IdUsuario);

      if (oenUsuario.NombreUsuario != null) {
        if (oenUsuario.entPerfil[0].IdPerfil != 0) {
          if (oenUsuario.CodigoEstadoUsuario == Convert.ToInt32(utlEnumerado.Estado.Activo)) {
            FormsAuthenticationTicket tkt;
            String cookiestr;
            HttpCookie ck;
            tkt = new FormsAuthenticationTicket(0, loenOficina.FirstOrDefault().CodigoOficina, DateTime.Now, DateTime.Now.AddMinutes(60), false, loenOficina.FirstOrDefault().NombreOficina);
            cookiestr = FormsAuthentication.Encrypt(tkt);
            ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
            ck.Path = FormsAuthentication.FormsCookiePath;
            Response.Cookies.Add(ck);

            if (loenOficina.Count() > 1)
              ScriptManager.RegisterStartupScript(this, GetType(), "OpenOficina", "Oficina();", true);
            else {
              strRedirect = Request["ReturnUrl"];
              if (strRedirect == null)
                strRedirect = "Principal.aspx";
              Response.Redirect(strRedirect, true);
            }
          } else
            lblMsg.Text = "El usuario no se encuentra activo en el sistema.";
        } else
          lblMsg.Text = "El usuario no tiene perfil asociado.";
      } else
        lblMsg.Text = "El usuario no se encuentra asociado en el sistema.";



      //using (PrincipalContext domainContext = new PrincipalContext(ContextType.Domain))
      //{
      //    if (domainContext.ValidateCredentials(Username.Text, Password.Text))
      //    {
      //        oenUsuario.NombreUsuario = Username.Text;
      //        oenUsuario = ornUsuario.ObtenerUsuario(oenUsuario);
      //        Session["obe_Usuario"] = oenUsuario;

      //        List<enOficina> loenOficina = ornOficina.ListarOficinaPorUsuario(oenUsuario.IdUsuario);

      //        if (oenUsuario.NombreUsuario != null)
      //        {
      //            if (oenUsuario.entPerfil[0].IdPerfil != 0)
      //            {
      //                if (oenUsuario.CodigoEstadoUsuario == Convert.ToInt32(utlEnumerado.Estado.Activo))
      //                {
      //                    FormsAuthenticationTicket tkt;
      //                    String cookiestr;
      //                    HttpCookie ck;
      //                    tkt = new FormsAuthenticationTicket(0, loenOficina.FirstOrDefault().CodigoOficina, DateTime.Now, DateTime.Now.AddMinutes(60), false, loenOficina.FirstOrDefault().NombreOficina);
      //                    cookiestr = FormsAuthentication.Encrypt(tkt);
      //                    ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
      //                    ck.Path = FormsAuthentication.FormsCookiePath;
      //                    Response.Cookies.Add(ck);

      //                    if (loenOficina.Count() > 1)
      //                        ScriptManager.RegisterStartupScript(this, GetType(), "OpenOficina", "Oficina();", true);
      //                    else
      //                    {
      //                        strRedirect = Request["ReturnUrl"];
      //                        if (strRedirect == null)
      //                            strRedirect = "Principal.aspx";
      //                        Response.Redirect(strRedirect, true);
      //                    }
      //                }
      //                else
      //                    lblMsg.Text = "El usuario no se encuentra activo en el sistema.";
      //            }
      //            else
      //                lblMsg.Text = "El usuario no tiene perfil asociado.";
      //        }
      //        else
      //            lblMsg.Text = "El usuario no se encuentra asociado en el sistema.";
      //    }
      //    else
      //        lblMsg.Text = "El usuario y/o contraseña son incorrectos.";
      //}
    } catch (Exception ex) {
      throw ex;
    }
  }
}